import pandas as pd
import os
import glob

def batch_excel_to_csv(input_dir, output_root_dir=None):
    """
    批量处理指定目录下的所有Excel文件，将每个文件的所有工作表转换为CSV
    
    参数:
        input_dir: 包含Excel文件的目录路径
        output_root_dir: 输出CSV文件的根目录，默认为input_dir下的csv_output目录
    """
    # 设置输出目录
    if output_root_dir is None:
        output_root_dir = os.path.join(input_dir, "csv_output")
    
    # 创建输出根目录
    os.makedirs(output_root_dir, exist_ok=True)
    
    # 获取目录下所有Excel文件（支持.xlsx和.xls格式）
    excel_files = glob.glob(os.path.join(input_dir, "*.xlsx")) + \
                  glob.glob(os.path.join(input_dir, "*.xls"))
    
    if not excel_files:
        print(f"在目录 {input_dir} 中未找到Excel文件")
        return
    
    # 遍历处理每个Excel文件
    for excel_path in excel_files:
        # 获取文件名（不含扩展名）
        file_name = os.path.splitext(os.path.basename(excel_path))[0]
        
        # 为每个Excel文件创建单独的输出目录
        file_output_dir = os.path.join(output_root_dir, file_name)
        os.makedirs(file_output_dir, exist_ok=True)
        
        try:
            # 读取Excel文件
            excel_file = pd.ExcelFile(excel_path)
            sheet_names = excel_file.sheet_names
            
            print(f"\n处理文件: {excel_path}")
            print(f"包含工作表: {', '.join(sheet_names)}")
            
            # 转换每个工作表为CSV
            for index, sheet_name in enumerate(sheet_names):
                # 读取工作表数据
                df = pd.read_excel(excel_file, sheet_name=sheet_name)
                
                # 生成CSV文件名，加入工作表序号作为前缀
                csv_file_name = f"{sheet_name}.csv"
                csv_file_path = os.path.join(file_output_dir, csv_file_name)
                
                # 保存为CSV（不包含索引，使用UTF-8编码）
                df.to_csv(csv_file_path, index=False, encoding='utf-8')
                print(f"已转换工作表 '{sheet_name}' -> {csv_file_path}")
        
        except Exception as e:
            print(f"处理文件 {excel_path} 时出错: {str(e)}")
    
    print("\n批量转换完成！")

# 使用示例
if __name__ == "__main__":
    # 替换为你的Excel文件所在目录
    excel_directory = "./bbat"
    
    # 可选：指定输出目录，不指定则默认在Excel目录下创建csv_output文件夹
    # output_directory = "/path/to/output/csv/files"
    
    # 执行批量转换
    batch_excel_to_csv(excel_directory)